博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
物联网架构成长之路(29)-Jenkins环境搭建
阅读量:6561 次
发布时间:2019-06-24

本文共 7237 字,大约阅读时间需要 24 分钟。

0. 说明

  哈哈,前面中间插入了一篇Eclipse增加Git插件,在此之前真的没有用过GIT。

 

1. 运行Jenkins

  这里为了方便,还是用Docker方式安装,由于这个是标准的war报,不对Docker Image进行过多的干预,直接使用官方的Jenkins即可

docker pull jenkins/jenkins:lts

  写一份docker-compose.yml

1 version: '3'2 services:3     jenkins:4         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/jenkins5         ports:6             - 8080:80807             - 50000:500008         volumes:9             - /root/workspace/docker/jenkins/data:/var/jenkins_home

 

2. 运行jenkins

  docker-compose启动容器

  然后访问宿主机,开始Jenkins安装和配置,安装就不多说了,就是下一步下一步。还有之前的博客也简单的讲解的Jenkins的搭建及使用。安装插件就使用官方默认的就可以了,以后有需要还可以在管理界面上增加。 遇到网速不好的,等一下重试一下就可以了。

  Ps: 安装后,如果刷新页面,没有出现登录界面的,重启一下jenkins

  进入欢迎界面

 

3. 本地eclipse关联GitLab仓库、利用Spring Cloud的Eureka测试自动构建

  物联网服务注册中心 global-service-eureka

  GlobalServiceEurekaApplication.java

1 @EnableEurekaServer2 @SpringBootApplication3 public class GlobalServiceEurekaApplication {4     public static void main(String[] args) {5         SpringApplication.run(GlobalServiceEurekaApplication.class, args);6     }7 }

  application.yml

1 server:2   port: 87613 eureka:4   client:5     register-with-eureka: false6     fetch-registry: false7     service-url:8       defaultZone: http://localhost:8761/eureka/

  在GitLab上创建项目

  Eclipse关联项目到GitLab这一步就不做过多说明

 

4. Jenkins 系统配置

  创建前,先标准插件安装,然后我们还需要安装几个插件,在系统管理-插件管理

  由于我们使用Maven构建Spring Cloud项目,所以需要增加对应的Maven Plugin。我们还使用了GitLab作为代码版本管理,因此需要安装Gitlab Hook Plugin用来使用提交代码,触发自动构建行为。最后还需要把自动构建的结果通过邮件返回给相关人员,这里又需要Email Extension Plugin。

  这一步需要配置Maven,默认的Jenkins Docker Image是有包含了JDK和GIT,所以我们只需要配置Maven。在系统管理-全局工具配置 这个界面,只需要配置Maven工具,使用自动安装。

  配置一下GIT帐号密码,在Jenkins-凭证-系统-全局凭证-新增

  配置邮件 在Jenkins-系统管理-系统设置

  配置Jenkins Locaion

  配置E-mail Notification,填入SMTP服务器、邮件后缀,用户名、密码。有些服务器要求SSL、SSL端口有587、465两种,好像可以不填,JavaMail包会自动选择。然后就可以测试发送了。

  由于默认的E-mail Notificaion功能比较弱,因此,需要Email Extension Plugin,对应的配置如下

 

5. Jenkins 任务

  创建一个任务、构建一个Maven项目

  配置源码管理Git方式,输入对应Repo URL、选择对应的认证凭证,这个在签名一步已经配置了,这里选择就可以。分支就选默认主分支的。

  构建触发器,采用Git上有人提交时触发构建

  这里将 GitLab Webhook URL,复制到GitLab对应的项目上。注意这里的URL,必须GitLab所在的服务器要能访问到。

  下面这个,根据实际构建Goals及Options进行配置,以后可能会通过Maven 直接构建成 Docker Image

  下面这个是配置构建成功后,对应执行的操作,以后可能会通过这个脚本,构建成docker Image然后上传到Aliyun Repo

  下面这个是配置自定义构建后,把结果发邮件到指定人,最前面的 Project From 要填前面配置的管理,下面的Recipient List可以写邮件接收人

  下面的高级,注意下面这个配置才是实际要发送的邮件内容。我们先默认的发送一份邮件测试一下。

  一切完成后,点击保存

 

6. 触发构建

  可以在GitLab的Web Hooks 点击 Test Hook 按钮,测试一下是否触发自动构建。

  看这里,自动触发构建、等构建完成,对应的邮箱就会收到构建结果。

 

  可以看到这个邮件已经收到了。结果也是显示在邮件里面

 

7. 自定义邮件格式

  初看邮件内容,感觉有点Low,通过下面方式实现自定义邮件内容。在 $JENKINS_HOME 目录下创建 email-templates 文件,创建 wunaozai.html 文件,并写上以下内容,可以通过以下方式预览效果。

  wunaozai.html 内容

    
" /> BUILD ${build.result ?: 'SUCCESSFUL'}
URL ${rooturl}${build.url}
Project: ${project.name}
Date: ${it.timestampString}
Duration: ${build.durationString}
Cause: <% build.causes.each() { cause -> %> ${cause.shortDescription} <% } %>
<% def changeSets = build.changeSets if(changeSets != null) { def hadChanges = false %>
<% changeSets.each() { cs_list -> cs_list.each() { cs -> hadChanges = true %>
<% cs.affectedFiles.each() { p -> %>
<% } } } if(!hadChanges) { %>
<% } %>
CHANGES
  Revision <%= cs.metaClass.hasProperty('commitId') ? cs.commitId : cs.metaClass.hasProperty('revision') ? cs.revision : cs.metaClass.hasProperty('changeNumber') ? cs.changeNumber : "" %> by <%= cs.author %>: (${cs.msgAnnotated})
  ${p.editType.name} ${p.path}
No Changes
<% } %>
<% def artifacts = build.artifacts if(artifacts != null && artifacts.size() > 0) { %>
BUILD ARTIFACTS
<% artifacts.each() { f -> %>
  • ${f}
  • <% } %>
    <% } %>
    <% try { def mbuilds = build.moduleBuilds if(mbuilds != null) { %>
    <% try { mbuilds.each() { m -> %>
    <% m.value.each() { mvnbld -> def artifactz = mvnbld.artifacts if(artifactz != null && artifactz.size() > 0) { %>
    <% } } } } catch(e) { // we don't do anything } %>
    BUILD ARTIFACTS
    ${m.key.displayName}
    <% artifactz.each() { f -> %>
  • ${f}
  • <% } %>
    <% }}catch(e) {// we don't do anything } %>
    <% def junitResultList = it.JUnitTestResult try { def cucumberTestResultAction = it.getAction("org.jenkinsci.plugins.cucumber.jsontestsupport.CucumberTestResultAction") junitResultList.add(cucumberTestResultAction.getResult()) } catch(e) { //cucumberTestResultAction not exist in this build } if (junitResultList.size() > 0) { %>
    <% junitResultList.each{ junitResult -> %> <% junitResult.getChildren().each { packageResult -> %>
    <% packageResult.getFailedTests().each{ failed_test -> %>
    <% } } } %>
    ${junitResultList.first().displayName}
    Name: ${packageResult.getName()} Failed: ${packageResult.getFailCount()} test(s), Passed: ${packageResult.getPassCount()} test(s), Skipped: ${packageResult.getSkipCount()} test(s), Total: ${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()} test(s)
  • Failed: ${failed_test.getFullName()}
  • <% } %>
    <% if(build.result==hudson.model.Result.FAILURE) { %>
    <% build.getLog(100).each() { line -> %>
    <% } %>
    CONSOLE OUTPUT
    ${org.apache.commons.lang.StringEscapeUtils.escapeHtml(line)}
    <% } %>

      进入到项目任务的配置界面,配置一下自定义邮件格式,如下图所属,配置Content部分,最后的Attach build log 也加上

      下图就是经过自定义后的邮件格式

      哈哈,收到邮件,格式还行,还带构建日志。就这样吧。

     

    8. 小结

      终于完了,发现这种截图式博客真的特别麻烦,应该是录视频好些。哈哈!!这一篇博客就讲到这里的。还有更多的功能,暂时没有讲到。Jenkins可以做的事情还是很多的。通过写脚本,做任意想要做的事情。不过这个就是根据实际项目来实现了。以后有机会用到我再讲。

     

    参考资料:

      

      
      
      
      

    本文地址: 

    转载地址:http://tuhco.baihongyu.com/

    你可能感兴趣的文章
    微软为无服务器架构引入新API管理消费层
    查看>>
    Concourse:可扩展的开源CI管道工具
    查看>>
    Eclipse基金会发布MicroProfile 2.2,适用于Java微服务
    查看>>
    效果逆天的通用语言模型GPT 2.0来了,它告诉了我们什么?
    查看>>
    深入剖析通信层和RPC调用的异步化(上)
    查看>>
    Steemit裁员近70%,将其归因于加密货币熊市
    查看>>
    麦当劳重金收购一大数据创业公司,持续加码数字化转型
    查看>>
    ThinkSNS + 后端2019年1月更新播报
    查看>>
    一个理解同步异步阻塞非阻塞非常好的解释
    查看>>
    云栖科技评论82期:乌镇上的产业新常态
    查看>>
    小视频程序开发掌握技巧才最重要
    查看>>
    Shell多线程备份数据库的脚本
    查看>>
    Java并发面试,了解这些就不会被坑了
    查看>>
    OA工作流引擎:作为组织血脉支撑的重要性解析
    查看>>
    如何在运行pyspark时加载本地jar包?
    查看>>
    计算机专业选Java和Python哪个前景好点?
    查看>>
    「镁客·请讲」酷哇机器人刘力源:主打低速自动驾驶场景,AI环卫需求正在急速增长...
    查看>>
    centos7安装kubeadm
    查看>>
    刷题 编写一个函数,给出可以转换的不同字符串的个数。
    查看>>
    二进制BinaryFormatter 泛型 序列化与反序列化 (保存文件到本地和读取)
    查看>>